package cn.jy.authority.service.impl;

import cn.jy.authority.mapper.ExpressageColumnMapper;
import cn.jy.authority.service.IExpressageColumnService;
import cn.jy.common.authority.ExpressageColumn;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;

@Service
@Slf4j
public class ExpressageColumnServiceImpl implements IExpressageColumnService {
    @Autowired
    private ExpressageColumnMapper expressageColumnMapper;

    /**
     * 查询快递管理菜单
     *
     * @param id 快递管理菜单主键
     * @return 快递管理菜单
     */
    @Override
    public ExpressageColumn selectExpressageColumnById(Long id) {
        return expressageColumnMapper.selectExpressageColumnById(id);
    }

    /**
     * 查询快递管理菜单列表
     *
     * @param expressageColumn 快递管理菜单
     * @return 快递管理菜单
     */
    @Override
    public List<ExpressageColumn> selectExpressageColumnList(ExpressageColumn expressageColumn) {
        long l = System.currentTimeMillis();
        log.info("打印当前时间{}", l);

        List<ExpressageColumn> columns = expressageColumnMapper.getAll();
        HashMap<String, ExpressageColumn> map = new HashMap<>();

        columns.forEach(column -> {
            column.setChildren(new ArrayList<>());//空列表赋值
            map.put(String.valueOf(column.getId()), column);
        });

        map.forEach((k, v) -> {
            map.forEach((k1, v1) -> {
                if (v.getId().equals(v1.getPid())) {
                    v.getChildren().add(v1);//二级目录加到一级目录
                }
            });
        });

        List<ExpressageColumn> values = new ArrayList<>(map.values());

        log.info("运行时间{}", System.currentTimeMillis() - l);


        for (ExpressageColumn column : columns) {
            column.setChildren(new ArrayList<>()); // 空列表赋值
        }

        // 构建层级关系
        for (int i = 0; i < columns.size(); i++) {
            ExpressageColumn parentColumn = columns.get(i);

            for (int j = 0; j < columns.size(); j++) {
                ExpressageColumn childColumn = columns.get(j);

                // 检查 childColumn 是否是 parentColumn 的子目录
                if (parentColumn.getId().equals(childColumn.getPid())) {
                    parentColumn.getChildren().add(childColumn);
                    // 将子目录添加到父目录的 children 列表中
                }
            }
        }



        return values;
    }

    /**
     * 新增快递管理菜单
     *
     * @param expressageColumn 快递管理菜单
     * @return 结果
     */
    @Override
    public int insertExpressageColumn(ExpressageColumn expressageColumn) {
        log.info("新增快递管理菜单{}", expressageColumn);
        return expressageColumnMapper.insertExpressageColumn(expressageColumn);
    }

    /**
     * 修改快递管理菜单
     *
     * @param expressageColumn 快递管理菜单
     * @return 结果
     */
    @Override
    public int updateExpressageColumn(ExpressageColumn expressageColumn) {
        log.info("修改快递管理菜单{}", expressageColumn);
        return expressageColumnMapper.updateExpressageColumn(expressageColumn);
    }

    /**
     * 批量删除快递管理菜单
     *
     * @param ids 需要删除的快递管理菜单主键
     * @return 结果
     */
    @Override
    public int deleteExpressageColumnByIds(Long[] ids) {
        return expressageColumnMapper.deleteExpressageColumnByIds(ids);
    }

    /**
     * 删除快递管理菜单信息
     *
     * @param id 快递管理菜单主键
     * @return 结果
     */
    @Override
    public int deleteExpressageColumnById(Long id) {
        return expressageColumnMapper.deleteExpressageColumnById(id);
    }
}
